package com.example.tms.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.example.tms.common.annotation.LogAction;
import com.example.tms.common.enums.Result;
import com.example.tms.entity.AIAnalysis;
import com.example.tms.service.AIService;

/**
 * AI分析控制器
 * 提供AI分析记录的CRUD操作
 */
@RestController
@RequestMapping("/ai-analyses")
public class AIController {
    @Autowired
    private AIService aiService;

    /**
     * 获取所有AI分析记录
     * @return 包含所有AI分析记录的结果
     */
    @LogAction("获取所有AI分析信息")
    @GetMapping("")
    @PreAuthorize("hasAnyRole('ADMIN','HR','EXECUTIVE')")
    public Result selectAll() {
        List<AIAnalysis> list = aiService.selectAll();
        return Result.success(list);
    }

    /**
     * 根据ID获取AI分析记录详情
     * @param id AI分析记录ID
     * @return 包含分析记录详情的结果
     */
    @LogAction("根据ID获取AI分析信息")
    @GetMapping("/{id}")
    @PreAuthorize("isAuthenticated()")
    public Result selectById(@PathVariable Integer id) {
        AIAnalysis aiAnalysis = aiService.selectById(id);
        return Result.success(aiAnalysis);
    }

    /**
     * 根据类型获取分析记录
     * @param type 分析类型(员工/部门)
     * @return 包含该类型所有分析记录的结果
     */
    @LogAction("根据类型获取AI分析信息")
    @GetMapping("/types/{type}")
    @PreAuthorize("hasAnyRole('ADMIN','HR','EXECUTIVE')")
    public Result selectByType(@PathVariable String type) {
        List<AIAnalysis> list = aiService.selectByType(type);
        return Result.success(list);
    }

    /**
     * 创建新的AI分析记录
     * @param aiAnalysis 包含分析信息的对象
     * @return 操作结果
     */
    @LogAction("创建新的AI分析信息")
    @PostMapping("")
    @PreAuthorize("hasAnyRole('ADMIN','HR','EXECUTIVE')")
    public Result add(@RequestBody AIAnalysis aiAnalysis) {
        int result = aiService.insert(aiAnalysis);
        return result > 0 ? Result.success() : Result.error("添加失败");
    }

    /**
     * 更新AI分析记录
     * @param id 分析记录ID
     * @param aiAnalysis 包含更新信息的对象
     * @return 操作结果
     */
    @LogAction("更新AI分析信息")
    @PutMapping("/{id}")
    @PreAuthorize("hasAnyRole('ADMIN','HR','EXECUTIVE')")
    public Result update(@PathVariable Integer id, @RequestBody AIAnalysis aiAnalysis) {
        aiAnalysis.setId(id);
        int result = aiService.update(aiAnalysis);
        return result > 0 ? Result.success() : Result.error("更新失败");
    }

    /**
     * 删除AI分析记录(软删除)
     * @param id 分析记录ID
     * @return 操作结果
     */
    @LogAction(value = "删除AI分析信息", level = "WARN")
    @DeleteMapping("/{id}")
    @PreAuthorize("hasAnyRole('ADMIN','HR','EXECUTIVE')")
    public Result delete(@PathVariable Integer id) {
        int result = aiService.deleteById(id);
        return result > 0 ? Result.success() : Result.error("删除失败");
    }

    /**
     * 根据员工ID查询AI分析记录
     * @param empId 员工ID
     * @return 包含该员工所有分析记录的结果
     */
    @LogAction("根据员工ID获取AI分析信息")
    @GetMapping("/employees/{empId}")
    @PreAuthorize("isAuthenticated()")
    public Result selectByEmpId(@PathVariable Integer empId) {
        List<AIAnalysis> list = aiService.selectByEmpId(empId);
        return Result.success(list);
    }

    /**
     * 根据部门ID查询AI分析记录
     * @param depId 部门ID
     * @return 包含该部门所有分析记录的结果
     */
    @LogAction("根据部门ID获取AI分析信息")
    @GetMapping("/departments/{depId}")
    @PreAuthorize("hasAnyRole('ADMIN','HR','EXECUTIVE')")
    public Result selectByDepId(@PathVariable Integer depId) {
        List<AIAnalysis> list = aiService.selectByDepId(depId);
        return Result.success(list);
    }
}
